package com.lu.pojo.thread.status;

/**
 * @author luzhenfang
 * @date 2020 05 24
 * @description 线程的状态
     * 线程状态。线程可以处于以下状态之一：
     * NEW
     * 尚未启动的线程处于此状态。
     * RUNNABLE
     * 在Java虚拟机中执行的线程处于此状态。
     * BLOCKED
     * 被阻塞等待监视器锁定的线程处于此状态。
     * WAITING
     * 正在等待另一个线程执行特定动作的线程处于此状态。
     * TIMED_WAITING
     * 正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。
     * TERMINATED
     * 已退出的线程处于此状态。
 */
public class ThreadStatus {
    public static void main(String[] args) throws InterruptedException {

       Thread thread = new Thread(()->{
           for (int i = 0; i < 5; i++) {
               try {
                   Thread.sleep(1000);
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
               System.out.println("////////");
           }
        });
       // 观察状态
        Thread.State state=thread.getState();
        System.out.println(state);
        // 观察启动后
        thread.start();
        state=thread.getState();
        System.out.println(state);
        // 只要线程不终止 就一直输出状态
        while(state!=Thread.State.TERMINATED){
            Thread.sleep(100);
            // 更新线程状态
            state=thread.getState();
            System.out.println(state);

        }
        // 死亡后的线程不能再次启动
        thread.start();
    }
}
